﻿/*********************************************************************************************************************
Unit tests VanguardDocumentation, Procedure SetTextProperty

© 2014 Erik Ackerholm

This file is part of SqlVanguard.

SqlVanguard is free software: you can redistribute it and/or modify it under the terms of the GNU General Public 
License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later 
version.

SqlVanguard is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with SqlVanguard. If not, see 
<http://www.gnu.org/licenses/>.
*********************************************************************************************************************/

set nocount on;
set xact_abort off;
GO

create table #TestCases (
	TestNo              integer not null           identity (1, 1),
	EntityName          nvarchar(512),
	EntityType          varchar(128),
	PropertyName        nvarchar(64),
	NewText             nvarchar(max),
	PropertyValues      xml,
	ErrorCode           integer,
	primary key (TestNo)
);
GO

insert into #TestCases
values
	('TestSchema', null, 'TestProp', 'Short test text.  ',
		'<Entity Level0Name="TestSchema" Level0Type="SCHEMA"/>
		<Properties>
			<Property Name="TestProp">Short test text.  </Property>
		</Properties>', null),
	-- 15000+ chars
	('TestSchema', 'SCHEMA', 'TestProp', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget mauris ac tellus interdum aliquet. In tincidunt convallis tortor ut cursus. Ut volutpat justo vitae diam pharetra consectetur. Etiam gravida risus risus, in placerat ante scelerisque eget. Suspendisse leo nulla, accumsan vel lobortis sit amet, ornare a ligula. Curabitur eu rutrum risus. Maecenas maximus, nunc consectetur maximus elementum, nisl magna commodo nulla, sed sollicitudin massa orci nec nisl. Phasellus a nulla enim. Ut quis fringilla ipsum. Praesent a luctus dolor.

Ut vulputate elit magna, et finibus ipsum sodales ullamcorper. Phasellus sit amet arcu non elit mollis cursus nec in ipsum. Fusce facilisis, dolor ut faucibus mattis, orci velit pulvinar enim, id scelerisque libero nibh nec lorem. Nullam efficitur pulvinar sem, eu tempor sem cursus at. Sed sed diam commodo ante maximus iaculis non quis nibh. Quisque risus nibh, viverra eu semper aliquet, porttitor ut risus. Cras egestas purus consectetur, sodales sapien eu, sollicitudin metus. Nunc et leo mollis, venenatis justo vitae, posuere eros. Sed auctor ullamcorper aliquam.

Quisque tellus nulla, condimentum at dapibus sit amet, tincidunt sit amet tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In hac habitasse platea dictumst. Nunc vitae ullamcorper odio. Nullam viverra mauris id nisi rhoncus, sed laoreet ante pellentesque. Pellentesque sagittis orci dui, in condimentum ligula faucibus quis. Aenean ultricies odio in dolor dignissim porta. Ut pretium at tortor vitae tincidunt. Aliquam sed consectetur justo. Maecenas a auctor diam. Fusce ut eleifend metus, id dapibus est. Donec consequat mauris eu porttitor consequat. Mauris vestibulum bibendum nulla, et commodo libero malesuada ac. Vestibulum eget volutpat orci. Proin faucibus risus ut sapien feugiat, nec consectetur dui venenatis.

Vivamus semper pretium ipsum, eget ornare dolor bibendum rutrum. Donec laoreet arcu tortor, sed placerat risus convallis a. Cras dictum aliquet lorem non pretium. Pellentesque ullamcorper justo turpis, vel semper turpis rhoncus venenatis. In nec massa ipsum. Curabitur facilisis accumsan ante, non suscipit elit ornare eget. Curabitur in risus sed massa dictum porttitor.

Vestibulum vestibulum efficitur massa, vitae ultricies orci imperdiet ac. Donec enim orci, euismod rhoncus lacinia tincidunt, commodo ac risus. Phasellus vel faucibus tortor. Curabitur finibus est risus, eu pharetra sapien tempor et. Praesent sit amet massa quis risus posuere aliquet. Praesent id eleifend ligula, ut auctor lorem. Donec tincidunt eget libero posuere porttitor. Vestibulum convallis ex nulla, ut semper turpis vestibulum non. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce dapibus est vitae diam aliquet pellentesque. Maecenas quis congue enim.

Proin eu nulla eu neque dapibus sodales in vitae massa. Quisque nulla tellus, aliquet ac nulla sed, venenatis auctor tellus. Phasellus eget massa laoreet, laoreet ligula tincidunt, aliquam lorem. Proin eleifend fermentum faucibus. Donec mattis hendrerit bibendum. Vestibulum eu dapibus sem. Vestibulum pharetra, magna sit amet fermentum bibendum, neque purus pulvinar nibh, quis laoreet orci tellus vel nunc. Morbi tincidunt interdum sapien sit amet lacinia. Mauris nulla libero, ultricies non pretium imperdiet, dapibus non est.

Nam laoreet enim neque. Donec et convallis orci. Aliquam erat volutpat. Cras convallis nulla vitae lacus fringilla, at porta sem cursus. Aliquam pulvinar ex id aliquet fringilla. Donec scelerisque venenatis nulla sed sodales. Nulla dignissim urna et odio posuere malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus a arcu convallis, faucibus magna in, varius odio. Nullam vel aliquet orci, rhoncus tempor velit. Quisque dignissim nec lectus sed ultricies. Aenean aliquam dignissim accumsan.

Aliquam erat volutpat. Donec gravida mauris vel malesuada faucibus. Nulla maximus tortor vitae ex elementum, nec ultricies nulla rhoncus. Sed auctor, mauris nec consequat lacinia, arcu mauris dictum tortor, eget facilisis libero dui sed nunc. Aenean mauris felis, luctus a eros at, blandit pellentesque ipsum. Praesent quis arcu cursus, tempus ex sed, varius tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Donec malesuada massa sed ligula porta, quis porttitor felis pharetra. Praesent placerat pellentesque arcu id blandit. Aliquam erat volutpat. Duis suscipit, turpis congue egestas efficitur, velit mauris varius metus, a tincidunt leo ipsum nec nibh. Vivamus tincidunt bibendum auctor. Aenean vel eleifend libero. Nunc efficitur ex sed neque laoreet, quis mollis nunc porta. Suspendisse nec ex lorem. Cras eu dui volutpat, pretium risus id, aliquet dui. Aenean id metus at eros viverra mattis quis eu ligula.

Cras sed velit lorem. Donec diam sem, cursus sed ligula vel, finibus condimentum metus. Etiam molestie velit id eros vulputate, sit amet consequat urna accumsan. Donec eget euismod augue. Pellentesque ullamcorper tortor in venenatis vestibulum. Nullam vehicula massa sed erat mattis hendrerit. Morbi non purus ut velit tincidunt mattis quis ac purus.

Sed tincidunt rutrum nulla, ac molestie purus vulputate vitae. Donec sit amet molestie tellus. Mauris vehicula tortor eget nulla imperdiet faucibus. Proin quis ultrices nulla. Morbi malesuada hendrerit erat quis euismod. Mauris pellentesque arcu felis, in condimentum lorem placerat a. Curabitur sagittis, sem ac ullamcorper lacinia, sem diam ultricies dui, a aliquam ipsum augue id quam. Curabitur turpis nulla, varius eu tincidunt quis, pellentesque fermentum sapien.

Ut et posuere arcu, a aliquet metus. Cras ut laoreet velit, in suscipit risus. Quisque id ex et metus laoreet eleifend. In ac vehicula sapien. Ut placerat ipsum arcu, eget blandit purus sodales ut. Quisque euismod purus ut ante sagittis, sit amet congue purus rhoncus. Fusce ultrices sem efficitur ex iaculis, a porttitor leo lobortis.

Nam vitae pretium elit, vitae malesuada erat. Nulla vitae felis sapien. Duis placerat vel lorem eu porttitor. Quisque auctor felis nec augue consequat, nec rutrum eros faucibus. Sed elit urna, pulvinar ac ante ut, dictum pellentesque nisl. Suspendisse sollicitudin accumsan justo non porta. Donec accumsan accumsan purus eu commodo. Sed scelerisque maximus elementum. Nulla tristique eleifend ultricies. Nam vel nunc ut lorem luctus auctor nec sit amet risus. Nulla fermentum leo purus, sit amet pellentesque elit rhoncus nec. Etiam laoreet, ex nec sodales pulvinar, eros diam viverra sem, in fringilla odio felis tempus orci. In egestas, augue sed fringilla eleifend, dui risus commodo mauris, eu volutpat massa turpis eget augue.

Vivamus rutrum non eros eu ultricies. Aliquam risus massa, convallis ac euismod in, vehicula sit amet leo. In hac habitasse platea dictumst. Nunc fermentum, ligula ut scelerisque bibendum, leo metus convallis lorem, congue facilisis lacus ex ac dolor. Aenean id libero sed ipsum hendrerit auctor. Integer placerat nec neque at faucibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas feugiat dui turpis, vitae ullamcorper eros dapibus eu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus eget cursus dui. In hac habitasse platea dictumst. Ut maximus tincidunt mauris, dictum mollis mauris ullamcorper id. Pellentesque ornare luctus elit, sed molestie lorem aliquam ac. Suspendisse massa risus, vulputate nec eleifend eu, pulvinar ut lacus.

Donec posuere augue odio, nec suscipit nulla facilisis vel. Mauris lobortis scelerisque justo, non vehicula ipsum vehicula ut. Ut malesuada ullamcorper nunc at convallis. Nullam eu purus et nulla euismod ultricies. Pellentesque imperdiet justo in fermentum blandit. Maecenas pharetra facilisis est a lacinia. Etiam tempor quam vel risus pretium, eget bibendum orci condimentum. Vivamus elit ligula, mattis eget vulputate nec, fringilla sed leo.

Nunc rutrum orci porttitor, lobortis nibh venenatis, pulvinar urna. Phasellus fermentum odio justo, sed tincidunt elit rhoncus eget. Quisque viverra lectus diam, sit amet commodo orci pulvinar et. In imperdiet sem sit amet est finibus, ac suscipit magna placerat. Donec finibus nulla ut libero molestie iaculis. Praesent sed auctor ligula. Donec sit amet molestie dui. Vestibulum nec lectus neque. Duis ullamcorper id turpis at egestas. Phasellus elit justo, posuere eget suscipit sed, scelerisque id lorem. Phasellus non placerat mi. Suspendisse eleifend fermentum fermentum. Donec efficitur justo eget vehicula suscipit. Etiam dictum lorem orci. Praesent porttitor ex sapien. Nunc accumsan erat at dui vestibulum venenatis.

Sed sed vulputate nisi. Nam a hendrerit orci, non elementum velit. Aenean congue velit nec lobortis faucibus. Integer iaculis varius est, condimentum venenatis augue commodo ac. Donec rhoncus enim sit amet diam vehicula, vehicula pretium justo tempus. Donec ac nisi convallis, cursus dolor ultrices, lacinia nibh. Cras pharetra justo sit amet leo pulvinar, ac porta ipsum tincidunt. Donec aliquet eleifend malesuada. Sed consectetur posuere nisl in vulputate.

Cras et eros in tellus sodales elementum. Phasellus metus ex, sodales ac varius a, pulvinar nec dui. Maecenas eget quam ornare, dapibus orci ac, sagittis quam. Nullam nec dui a diam rutrum porttitor. Donec pulvinar velit id erat commodo ultrices ac non felis. Nullam quam magna, viverra sed feugiat sed, rutrum sed erat. Sed condimentum rhoncus facilisis. Curabitur risus ex, elementum eget semper at, volutpat nec massa. Integer hendrerit luctus elit, eget cursus lacus mollis ut.

Aliquam sit amet eleifend purus. Suspendisse sagittis turpis ipsum, vitae semper lectus feugiat in. In hac habitasse platea dictumst. Cras mattis in nisi at consequat. Sed id nulla ut diam blandit rutrum. Nunc nec risus convallis, rutrum purus vitae, consequat turpis. Donec at cursus ipsum. Aenean tincidunt placerat ex vitae bibendum. Cras sed vestibulum ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque tincidunt risus ut vehicula mattis. Nulla quis arcu dolor. Cras vel dignissim ipsum.

Fusce ante nulla, tempor a felis non, euismod fermentum elit. Sed condimentum lectus enim, posuere volutpat ipsum efficitur et. Maecenas porttitor risus in malesuada semper. Morbi tincidunt vitae lacus quis ullamcorper. Maecenas et sem non metus bibendum placerat id ac est. Maecenas a tincidunt nisl, sed accumsan ligula. Suspendisse lacinia urna eget facilisis pharetra. Maecenas neque nisl, mattis at faucibus sed, pharetra ut metus. Nullam egestas quam a posuere euismod. Fusce tincidunt hendrerit sem, in efficitur lorem dapibus et. Ut volutpat molestie nulla. Praesent ac tortor eu magna ornare iaculis eu nec dui. Sed scelerisque ex vel vestibulum fringilla. Maecenas eleifend diam elit, id tristique quam auctor sed.

Aenean vitae semper enim. Sed ut mauris non massa fermentum condimentum eget quis turpis. Integer fringilla vestibulum vestibulum. Suspendisse lacinia ligula eget vestibulum feugiat. Maecenas bibendum hendrerit neque, sit amet consequat urna bibendum non. Integer metus mi, porta quis tincidunt non, sagittis a libero. Aenean finibus dictum sem sed elementum. Morbi molestie ante id pretium finibus. Suspendisse ipsum velit, hendrerit sit amet lectus vitae, pretium malesuada arcu. Suspendisse magna diam, lobortis accumsan dictum id, lobortis et magna. Maecenas pellentesque, odio sed aliquet mattis, leo lacus elementum magna, eget convallis nisl orci id odio. Fusce vitae libero tincidunt, elementum diam sed, laoreet ligula. Nullam lorem massa, pretium sed augue ac, fringilla facilisis mauris. Nullam sit amet turpis sollicitudin, fermentum dui at, iaculis enim. Etiam nec gravida odio.

Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed eu condimentum mauris, in rutrum augue. In ullamcorper in enim quis blandit. Vestibulum augue lacus, eleifend id molestie sit amet, ultrices molestie enim. Integer consequat porttitor elit eget vulputate. Sed ut ex id ipsum laoreet tristique fermentum a erat. Pellentesque at imperdiet ligula, eget interdum nibh. Ut luctus consectetur sollicitudin. Praesent vulputate, mi quis auctor aliquet, tortor justo elementum libero, non vehicula ante eros sed ipsum. Aliquam pretium, quam quis accumsan fringilla, turpis diam vehicula eros, sed venenatis libero dui nec mauris. Aliquam erat volutpat. Nulla facilisi. Fusce mollis pretium eros, nec consectetur tellus porttitor sit amet. Nunc convallis turpis ultrices tortor finibus vulputate lacinia a orci. Phasellus sollicitudin lectus in dui luctus, quis ultrices elit cursus. Fusce tincidunt pretium velit, sed elementum nulla mollis a.

Integer sit amet auctor diam. Donec vitae blandit turpis. Aenean at consequat ante. Nunc in sagittis neque. Ut tempor, velit sit amet pulvinar ultrices, erat odio laoreet sapien, vel hendrerit tellus sapien nec arcu. In viverra tincidunt mauris, et condimentum turpis mattis ut. Morbi viverra mauris et lacus laoreet, sed volutpat libero laoreet. Aenean efficitur condimentum orci nec placerat. Vivamus varius nunc nec vestibulum fringilla. Vivamus vulputate congue sagittis. Nam id odio sit amet diam luctus hendrerit. Etiam tincidunt, diam sit amet suscipit dictum, enim dolor commodo nunc, non tempus neque ipsum non justo. Integer rhoncus quam diam, id pulvinar orci eleifend et. Nulla elementum ante nec lacinia convallis.

Etiam pretium ullamcorper massa, ac condimentum dolor pellentesque ut. Vivamus tempor augue ex, non volutpat mi aliquet a. Etiam non ex at ex rutrum laoreet non non nulla. Vivamus efficitur odio non interdum volutpat. In aliquam congue diam vel tempor. Vestibulum viverra mi vitae blandit interdum. Donec nec ipsum rutrum, blandit nunc vel, congue massa. Proin ac eros nec nulla vulputate blandit gravida quis augue. Mauris purus mauris, pretium vitae porta a, ultricies a tortor. Nam faucibus sem id ligula pellentesque pretium. Cras nisi libero, auctor id tempus id, dignissim et nunc. Suspendisse mollis tempor orci at iaculis. Praesent turpis dui, convallis a justo nec, dictum bibendum quam.

Cras vitae lacus at risus tincidunt suscipit eu at turpis. Cras orci diam, convallis eget ullamcorper non, dignissim in nunc. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum in erat hendrerit, ultrices magna eget, egestas libero. Praesent ultricies vel odio in sagittis. Nunc sollicitudin mattis ante eu efficitur. Vivamus sit amet lacus dignissim urna lacinia bibendum at id erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam nec odio condimentum, congue mi placerat, dapibus ipsum. Nullam sit amet dignissim lorem, a fringilla dolor. Nullam quis bibendum ipsum. Pellentesque sodales erat vel dolor aliquet, non porta arcu varius. Morbi in condimentum lectus. Curabitur nullam.',
		'<Entity Level0Name="TestSchema" Level0Type="SCHEMA"/>
		<Properties>
			<Property Name="TestProp">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget mauris ac tellus interdum aliquet. In tincidunt convallis tortor ut cursus. Ut volutpat justo vitae diam pharetra consectetur. Etiam gravida risus risus, in placerat ante scelerisque eget. Suspendisse leo nulla, accumsan vel lobortis sit amet, ornare a ligula. Curabitur eu rutrum risus. Maecenas maximus, nunc consectetur maximus elementum, nisl magna commodo nulla, sed sollicitudin massa orci nec nisl. Phasellus a nulla enim. Ut quis fringilla ipsum. Praesent a luctus dolor.

Ut vulputate elit magna, et finibus ipsum sodales ullamcorper. Phasellus sit amet arcu non elit mollis cursus nec in ipsum. Fusce facilisis, dolor ut faucibus mattis, orci velit pulvinar enim, id scelerisque libero nibh nec lorem. Nullam efficitur pulvinar sem, eu tempor sem cursus at. Sed sed diam commodo ante maximus iaculis non quis nibh. Quisque risus nibh, viverra eu semper aliquet, porttitor ut risus. Cras egestas purus consectetur, sodales sapien eu, sollicitudin metus. Nunc et leo mollis, venenatis justo vitae, posuere eros. Sed auctor ullamcorper aliquam.

Quisque tellus nulla, condimentum at dapibus sit amet, tincidunt sit amet tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In hac habitasse platea dictumst. Nunc vitae ullamcorper odio. Nullam viverra mauris id nisi rhoncus, sed laoreet ante pellentesque. Pellentesque sagittis orci dui, in condimentum ligula faucibus quis. Aenean ultricies odio in dolor dignissim porta. Ut pretium at tortor vitae tincidunt. Aliquam sed consectetur justo. Maecenas a auctor diam. Fusce ut eleifend metus, id dapibus est. Donec consequat mauris eu porttitor consequat. Mauris vestibulum bibendum nulla, et commodo libero malesuada ac. Vestibulum eget volutpat orci. Proin faucibus risus ut sapien feugiat, nec consectetur dui venenatis.

Vivamus semper pretium ipsum, eget ornare dolor bibendum rutrum. Donec laoreet arcu tortor, sed placerat risus convallis a. Cras dictum aliquet lorem non pretium. Pellentesque ullamcorper justo turpis, vel semper turpis rhoncus venenatis. In nec massa ipsum. Curabitur facilisis accumsan ante, non suscipit elit ornare eget. Curabitur in risus sed massa dictum porttitor.

Vestibulum vestibulum efficitur massa, vitae ultricies orci imperdiet ac. Donec enim orci, euismod rhoncus lacinia tincidunt, commodo ac risus. Phasellus vel faucibus tortor. Curabitur finibus est risus, eu pharetra sapien tempor et. Praesent sit amet massa quis risus posuere aliquet. Praesent id eleifend ligula, ut auctor lorem. Donec tincidunt eget libero posuere porttitor. Vestibulum convallis ex nulla, ut semper turpis vestibulum non. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce dapibus est vitae diam aliquet pellentesque. Maecenas quis congue enim.

Proin eu nulla eu neque dapibus sodales in vitae massa. Quisque nulla tellus, aliquet ac nulla sed, venenatis auctor tellus. Phasellus eget massa laoreet, laoreet ligula tincidunt, aliquam lorem. Proin eleifend fermentum faucibus. Donec mattis hendrerit bibendum. Vestibulum eu dapibus sem. Vestibulum pharetra, magna sit amet fermentum bibendum, neque purus pulvinar nibh, quis laoreet orci tellus vel nunc. Morbi tincidunt interdum sapien sit amet lacinia. Mauris nulla libero, ultricies non pretium imperdiet, dapibus non est.

Nam laoreet enim neque. Donec et convallis orci. Aliquam erat volutpat. Cras convallis nulla vitae lacus fringilla, at porta sem cursus. Aliquam pulvinar ex id aliquet fringilla. Donec scelerisque venenatis nulla sed sodales. Nulla dignissim urna et odio posuere malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrice</Property>
			<Property Name="TestProp_1">s posuere cubilia Curae; Vivamus a arcu convallis, faucibus magna in, varius odio. Nullam vel aliquet orci, rhoncus tempor velit. Quisque dignissim nec lectus sed ultricies. Aenean aliquam dignissim accumsan.

Aliquam erat volutpat. Donec gravida mauris vel malesuada faucibus. Nulla maximus tortor vitae ex elementum, nec ultricies nulla rhoncus. Sed auctor, mauris nec consequat lacinia, arcu mauris dictum tortor, eget facilisis libero dui sed nunc. Aenean mauris felis, luctus a eros at, blandit pellentesque ipsum. Praesent quis arcu cursus, tempus ex sed, varius tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Donec malesuada massa sed ligula porta, quis porttitor felis pharetra. Praesent placerat pellentesque arcu id blandit. Aliquam erat volutpat. Duis suscipit, turpis congue egestas efficitur, velit mauris varius metus, a tincidunt leo ipsum nec nibh. Vivamus tincidunt bibendum auctor. Aenean vel eleifend libero. Nunc efficitur ex sed neque laoreet, quis mollis nunc porta. Suspendisse nec ex lorem. Cras eu dui volutpat, pretium risus id, aliquet dui. Aenean id metus at eros viverra mattis quis eu ligula.

Cras sed velit lorem. Donec diam sem, cursus sed ligula vel, finibus condimentum metus. Etiam molestie velit id eros vulputate, sit amet consequat urna accumsan. Donec eget euismod augue. Pellentesque ullamcorper tortor in venenatis vestibulum. Nullam vehicula massa sed erat mattis hendrerit. Morbi non purus ut velit tincidunt mattis quis ac purus.

Sed tincidunt rutrum nulla, ac molestie purus vulputate vitae. Donec sit amet molestie tellus. Mauris vehicula tortor eget nulla imperdiet faucibus. Proin quis ultrices nulla. Morbi malesuada hendrerit erat quis euismod. Mauris pellentesque arcu felis, in condimentum lorem placerat a. Curabitur sagittis, sem ac ullamcorper lacinia, sem diam ultricies dui, a aliquam ipsum augue id quam. Curabitur turpis nulla, varius eu tincidunt quis, pellentesque fermentum sapien.

Ut et posuere arcu, a aliquet metus. Cras ut laoreet velit, in suscipit risus. Quisque id ex et metus laoreet eleifend. In ac vehicula sapien. Ut placerat ipsum arcu, eget blandit purus sodales ut. Quisque euismod purus ut ante sagittis, sit amet congue purus rhoncus. Fusce ultrices sem efficitur ex iaculis, a porttitor leo lobortis.

Nam vitae pretium elit, vitae malesuada erat. Nulla vitae felis sapien. Duis placerat vel lorem eu porttitor. Quisque auctor felis nec augue consequat, nec rutrum eros faucibus. Sed elit urna, pulvinar ac ante ut, dictum pellentesque nisl. Suspendisse sollicitudin accumsan justo non porta. Donec accumsan accumsan purus eu commodo. Sed scelerisque maximus elementum. Nulla tristique eleifend ultricies. Nam vel nunc ut lorem luctus auctor nec sit amet risus. Nulla fermentum leo purus, sit amet pellentesque elit rhoncus nec. Etiam laoreet, ex nec sodales pulvinar, eros diam viverra sem, in fringilla odio felis tempus orci. In egestas, augue sed fringilla eleifend, dui risus commodo mauris, eu volutpat massa turpis eget augue.

Vivamus rutrum non eros eu ultricies. Aliquam risus massa, convallis ac euismod in, vehicula sit amet leo. In hac habitasse platea dictumst. Nunc fermentum, ligula ut scelerisque bibendum, leo metus convallis lorem, congue facilisis lacus ex ac dolor. Aenean id libero sed ipsum hendrerit auctor. Integer placerat nec neque at faucibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas feugiat dui turpis, vitae ullamcorper eros dapibus eu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus eget cursus dui. In hac habitasse platea dictumst. Ut maximus tincidunt mauris, dictum mollis mauris ullamcorper id. Pellentes</Property>
			<Property Name="TestProp_2">que ornare luctus elit, sed molestie lorem aliquam ac. Suspendisse massa risus, vulputate nec eleifend eu, pulvinar ut lacus.

Donec posuere augue odio, nec suscipit nulla facilisis vel. Mauris lobortis scelerisque justo, non vehicula ipsum vehicula ut. Ut malesuada ullamcorper nunc at convallis. Nullam eu purus et nulla euismod ultricies. Pellentesque imperdiet justo in fermentum blandit. Maecenas pharetra facilisis est a lacinia. Etiam tempor quam vel risus pretium, eget bibendum orci condimentum. Vivamus elit ligula, mattis eget vulputate nec, fringilla sed leo.

Nunc rutrum orci porttitor, lobortis nibh venenatis, pulvinar urna. Phasellus fermentum odio justo, sed tincidunt elit rhoncus eget. Quisque viverra lectus diam, sit amet commodo orci pulvinar et. In imperdiet sem sit amet est finibus, ac suscipit magna placerat. Donec finibus nulla ut libero molestie iaculis. Praesent sed auctor ligula. Donec sit amet molestie dui. Vestibulum nec lectus neque. Duis ullamcorper id turpis at egestas. Phasellus elit justo, posuere eget suscipit sed, scelerisque id lorem. Phasellus non placerat mi. Suspendisse eleifend fermentum fermentum. Donec efficitur justo eget vehicula suscipit. Etiam dictum lorem orci. Praesent porttitor ex sapien. Nunc accumsan erat at dui vestibulum venenatis.

Sed sed vulputate nisi. Nam a hendrerit orci, non elementum velit. Aenean congue velit nec lobortis faucibus. Integer iaculis varius est, condimentum venenatis augue commodo ac. Donec rhoncus enim sit amet diam vehicula, vehicula pretium justo tempus. Donec ac nisi convallis, cursus dolor ultrices, lacinia nibh. Cras pharetra justo sit amet leo pulvinar, ac porta ipsum tincidunt. Donec aliquet eleifend malesuada. Sed consectetur posuere nisl in vulputate.

Cras et eros in tellus sodales elementum. Phasellus metus ex, sodales ac varius a, pulvinar nec dui. Maecenas eget quam ornare, dapibus orci ac, sagittis quam. Nullam nec dui a diam rutrum porttitor. Donec pulvinar velit id erat commodo ultrices ac non felis. Nullam quam magna, viverra sed feugiat sed, rutrum sed erat. Sed condimentum rhoncus facilisis. Curabitur risus ex, elementum eget semper at, volutpat nec massa. Integer hendrerit luctus elit, eget cursus lacus mollis ut.

Aliquam sit amet eleifend purus. Suspendisse sagittis turpis ipsum, vitae semper lectus feugiat in. In hac habitasse platea dictumst. Cras mattis in nisi at consequat. Sed id nulla ut diam blandit rutrum. Nunc nec risus convallis, rutrum purus vitae, consequat turpis. Donec at cursus ipsum. Aenean tincidunt placerat ex vitae bibendum. Cras sed vestibulum ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque tincidunt risus ut vehicula mattis. Nulla quis arcu dolor. Cras vel dignissim ipsum.

Fusce ante nulla, tempor a felis non, euismod fermentum elit. Sed condimentum lectus enim, posuere volutpat ipsum efficitur et. Maecenas porttitor risus in malesuada semper. Morbi tincidunt vitae lacus quis ullamcorper. Maecenas et sem non metus bibendum placerat id ac est. Maecenas a tincidunt nisl, sed accumsan ligula. Suspendisse lacinia urna eget facilisis pharetra. Maecenas neque nisl, mattis at faucibus sed, pharetra ut metus. Nullam egestas quam a posuere euismod. Fusce tincidunt hendrerit sem, in efficitur lorem dapibus et. Ut volutpat molestie nulla. Praesent ac tortor eu magna ornare iaculis eu nec dui. Sed scelerisque ex vel vestibulum fringilla. Maecenas eleifend diam elit, id tristique quam auctor sed.

Aenean vitae semper enim. Sed ut mauris non massa fermentum condimentum eget quis turpis. Integer fringilla vestibulum vestibulum. Suspendisse lacinia ligula eget vestibulum feugiat. Maecenas bibendum hendrerit neque, sit amet co</Property>
			<Property Name="TestProp_3">nsequat urna bibendum non. Integer metus mi, porta quis tincidunt non, sagittis a libero. Aenean finibus dictum sem sed elementum. Morbi molestie ante id pretium finibus. Suspendisse ipsum velit, hendrerit sit amet lectus vitae, pretium malesuada arcu. Suspendisse magna diam, lobortis accumsan dictum id, lobortis et magna. Maecenas pellentesque, odio sed aliquet mattis, leo lacus elementum magna, eget convallis nisl orci id odio. Fusce vitae libero tincidunt, elementum diam sed, laoreet ligula. Nullam lorem massa, pretium sed augue ac, fringilla facilisis mauris. Nullam sit amet turpis sollicitudin, fermentum dui at, iaculis enim. Etiam nec gravida odio.

Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed eu condimentum mauris, in rutrum augue. In ullamcorper in enim quis blandit. Vestibulum augue lacus, eleifend id molestie sit amet, ultrices molestie enim. Integer consequat porttitor elit eget vulputate. Sed ut ex id ipsum laoreet tristique fermentum a erat. Pellentesque at imperdiet ligula, eget interdum nibh. Ut luctus consectetur sollicitudin. Praesent vulputate, mi quis auctor aliquet, tortor justo elementum libero, non vehicula ante eros sed ipsum. Aliquam pretium, quam quis accumsan fringilla, turpis diam vehicula eros, sed venenatis libero dui nec mauris. Aliquam erat volutpat. Nulla facilisi. Fusce mollis pretium eros, nec consectetur tellus porttitor sit amet. Nunc convallis turpis ultrices tortor finibus vulputate lacinia a orci. Phasellus sollicitudin lectus in dui luctus, quis ultrices elit cursus. Fusce tincidunt pretium velit, sed elementum nulla mollis a.

Integer sit amet auctor diam. Donec vitae blandit turpis. Aenean at consequat ante. Nunc in sagittis neque. Ut tempor, velit sit amet pulvinar ultrices, erat odio laoreet sapien, vel hendrerit tellus sapien nec arcu. In viverra tincidunt mauris, et condimentum turpis mattis ut. Morbi viverra mauris et lacus laoreet, sed volutpat libero laoreet. Aenean efficitur condimentum orci nec placerat. Vivamus varius nunc nec vestibulum fringilla. Vivamus vulputate congue sagittis. Nam id odio sit amet diam luctus hendrerit. Etiam tincidunt, diam sit amet suscipit dictum, enim dolor commodo nunc, non tempus neque ipsum non justo. Integer rhoncus quam diam, id pulvinar orci eleifend et. Nulla elementum ante nec lacinia convallis.

Etiam pretium ullamcorper massa, ac condimentum dolor pellentesque ut. Vivamus tempor augue ex, non volutpat mi aliquet a. Etiam non ex at ex rutrum laoreet non non nulla. Vivamus efficitur odio non interdum volutpat. In aliquam congue diam vel tempor. Vestibulum viverra mi vitae blandit interdum. Donec nec ipsum rutrum, blandit nunc vel, congue massa. Proin ac eros nec nulla vulputate blandit gravida quis augue. Mauris purus mauris, pretium vitae porta a, ultricies a tortor. Nam faucibus sem id ligula pellentesque pretium. Cras nisi libero, auctor id tempus id, dignissim et nunc. Suspendisse mollis tempor orci at iaculis. Praesent turpis dui, convallis a justo nec, dictum bibendum quam.

Cras vitae lacus at risus tincidunt suscipit eu at turpis. Cras orci diam, convallis eget ullamcorper non, dignissim in nunc. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum in erat hendrerit, ultrices magna eget, egestas libero. Praesent ultricies vel odio in sagittis. Nunc sollicitudin mattis ante eu efficitur. Vivamus sit amet lacus dignissim urna lacinia bibendum at id erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam nec odio condimentum, congue mi placerat, dapibus ipsum. Nullam sit amet dignissim lorem, a fringilla dolor. Nullam quis bibendum ipsum. Pellentesque sodales erat vel dolor aliquet, non porta arcu varius</Property>
			<Property Name="TestProp_4">. Morbi in condimentum lectus. Curabitur nullam.</Property>
		</Properties>', null),
	('TestSchema', null, 'TestProp', null,
		'<Entity Level0Name="TestSchema" Level0Type="SCHEMA"/>
		<Properties/>', null);
GO

declare @TestNo as integer;
declare @EntityName as nvarchar(512);
declare @EntityType as varchar(128);
declare @PropertyName as nvarchar(64);
declare @NewText as nvarchar(max);

declare @ExpectedError as integer;
declare @ErrorCode as integer;

declare @Level0Name as nvarchar(128);
declare @Level1Name as nvarchar(128);
declare @Level2Name as nvarchar(128);
declare @Level0Type as varchar(64);
declare @Level1Type as varchar(64);
declare @Level2Type as varchar(64);

declare @Properties as table (
	Name          nvarchar(128) not null,
	Value         nvarchar(3750),
	primary key (Name)
);

set @TestNo = (select min(TestNo) from #TestCases);

while
	@TestNo is not null
begin
	
	-- Fetch input data
	set @EntityName = (select EntityName from #TestCases where TestNo = @TestNo);
	set @EntityType = (select EntityType from #TestCases where TestNo = @TestNo);
	set @PropertyName = (select PropertyName from #TestCases where TestNo = @TestNo);
	set @NewText = (select NewText from #TestCases where TestNo = @TestNo);
	set @ExpectedError = (select ErrorCode from #TestCases where TestNo = @TestNo);
	set @ErrorCode = null;
	
	-- Fetch resulting properties
	set @Level0Name = (select PropertyValues.value('(/Entity/@Level0Name)[1]', 'nvarchar(128)') from #TestCases where TestNo = @TestNo);
	set @Level1Name = (select PropertyValues.value('(/Entity/@Level1Name)[1]', 'nvarchar(128)') from #TestCases where TestNo = @TestNo);
	set @Level2Name = (select PropertyValues.value('(/Entity/@Level2Name)[1]', 'nvarchar(128)') from #TestCases where TestNo = @TestNo);
	set @Level0Type = (select PropertyValues.value('(/Entity/@Level0Type)[1]', 'varchar(64)') from #TestCases where TestNo = @TestNo);
	set @Level1Type = (select PropertyValues.value('(/Entity/@Level1Type)[1]', 'varchar(64)') from #TestCases where TestNo = @TestNo);
	set @Level2Type = (select PropertyValues.value('(/Entity/@Level2Type)[1]', 'varchar(64)') from #TestCases where TestNo = @TestNo);
	
	delete from @Properties;
	insert into @Properties
	select p.Property.value('@Name', 'nvarchar(128)'), p.Property.value('text()[1]', 'nvarchar(3750)')
	from #TestCases as tc
		cross apply tc.PropertyValues.nodes('/Properties/Property') as p (Property)
	where tc.TestNo = @TestNo;
	
	-- Run proc
	begin try;
		execute VanguardDocumentation.SetTextProperty @EntityName, @PropertyName, @NewText, @EntityType;
	end try
	begin catch
		set @ErrorCode = error_number();
	end catch;
	
	-- Check results, difference in errors
	if
		coalesce(@ExpectedError, 0) <> coalesce(@ErrorCode, 0)
	begin
		print 'SetTextProperty, Failed test no ' + rtrim(@TestNo);
		print '	Expected error ' + coalesce(rtrim(@ExpectedError), 'null')
			+ ' but received ' + coalesce(rtrim(@ErrorCode), 'null');
	end
	-- Check results, unexpected properties
	else if
		exists (
			select name collate Latin1_General_CS_AS, convert(nvarchar(3750), value) collate Latin1_General_CS_AS
			from fn_listextendedproperty
				(null, @Level0Type, @Level0Name, @Level1Type, @Level1Name, @Level2Type, @Level2Name)
			except
			select Name, Value
			from @Properties
		)
	begin
		print 'SetTextProperty, Failed test no ' + rtrim(@TestNo);
		print '	Unexpected property for set entity:';
		select *
		from fn_listextendedproperty
			(null, @Level0Type, @Level0Name, @Level1Type, @Level1Name, @Level2Type, @Level2Name)
	end
	-- Check results, missing properties
	else if
		exists (
			select Name, Value
			from @Properties
			except
			select name collate Latin1_General_CS_AS, convert(nvarchar(3750), value) collate Latin1_General_CS_AS
			from fn_listextendedproperty
				(null, @Level0Type, @Level0Name, @Level1Type, @Level1Name, @Level2Type, @Level2Name)
		)
	begin
		print 'SetTextProperty, Failed test no ' + rtrim(@TestNo);
		print '	Missing property for set entity:';
		select *
		from fn_listextendedproperty
			(null, @Level0Type, @Level0Name, @Level1Type, @Level1Name, @Level2Type, @Level2Name)
	end;
	
	set @TestNo = (select min(TestNo) from #TestCases where TestNo > @TestNo);

end;
GO

drop table #TestCases;
GO

set nocount off;
GO

/*
-- Checking individual test

declare @EntityName as nvarchar(512);
declare @EntityType as varchar(128);
declare @PropertyName as nvarchar(64);
declare @NewText as nvarchar(max);

set @EntityName = 'TestSchema';
set @EntityType = null;
set @PropertyName = 'TestProp';
set @NewText = 'Short test text.';

execute VanguardDocumentation.SetTextProperty @EntityName, @PropertyName, @NewText, @EntityType;

*/




